﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace rent_car.Manejadores
{
    class ManejadorDeVehiculos : Manejador
    {

        public static ManejadorDeVehiculos getInstancia()
        { 
            if(instancia == null)
            {
                instancia = new ManejadorDeVehiculos();
            }
            return instancia;
        }       

        private ManejadorDeVehiculos()
        {
            manejadorDB = new EnlaceDatosDataContext();
        }        

        #region Manejador Members

        public void agregar(object objeto)
        {
            vehiculo nuevoVehiculo = (vehiculo)objeto;
            manejadorDB.agregarVehiculos(
                nuevoVehiculo.marca_id,
                nuevoVehiculo.modelo,
                nuevoVehiculo.ano,
                nuevoVehiculo.color,
                nuevoVehiculo.transmision,
                nuevoVehiculo.motor,
                nuevoVehiculo.placa,
                nuevoVehiculo.estado,
                nuevoVehiculo.observacion,
                nuevoVehiculo.img_vehiculo,
                nuevoVehiculo.activo);
         }

        public void eliminar(int id)
        {
            manejadorDB.eliminarVehiculo(id);
        }

        public void modificar(object objeto)
        {
           vehiculo vehiculoModificado = (vehiculo)objeto;
           manejadorDB.modificarVehiculo(
               vehiculoModificado.vehiculo_id,
               vehiculoModificado.marca_id,
               vehiculoModificado.modelo,
               vehiculoModificado.ano,
               vehiculoModificado.color,
               vehiculoModificado.transmision,
               vehiculoModificado.motor,
               vehiculoModificado.placa,
               vehiculoModificado.estado,
               vehiculoModificado.observacion,
               vehiculoModificado.img_vehiculo,
               vehiculoModificado.activo);
        }

        public ICollection getObject()
        {
            var vehDisp = from v in manejadorDB.vehiculos
                          where v.activo == true
                          select v;
            return vehDisp.ToList();
        }

        public void cambiarEstadoVehiculo(vehiculo vehiculo) {
            manejadorDB.estadoVehiculo(vehiculo.vehiculo_id,vehiculo.estado);
        }

        public List<vehiculo> vehiculosDisponibles() {
            var vehDisp = from v in manejadorDB.vehiculos
                          where v.activo == true
                          && !v.estado.Equals("rentado")
                          select v;
            return vehDisp.ToList();
        }

        public List<vehiculo> GetVehiculosPorMarca(int id, string motor, string transmision)
        {
           IEnumerable<vehiculo> vehiculos = null;                      
            var vpm = from v in manejadorDB.vehiculos                      
                      where v.activo == true
                      && !v.estado.Equals("rentado")
                      select v;
            vehiculos = vpm;
            if(id >0){
                vehiculos = from vm in vehiculos
                            where vm.marca.marca_id == id
                            select vm;
            }
            if (!motor.Equals("Todo"))
            {
                vehiculos = from vm in vehiculos
                            where vm.motor.Equals(motor)
                            select vm;
            }
            if (!transmision.Equals("Todo"))
            {
                vehiculos = from vm in vehiculos
                            where vm.transmision.Equals(transmision)
                            select vm;
            }
            return vehiculos.ToList();
        }

        #endregion

        private EnlaceDatosDataContext manejadorDB = null;
        private static ManejadorDeVehiculos instancia = null;
    }
}
